//引入express模块
const express = require("express");
//                           加载bodyParser模块
// const bodyParser = require("body-parser");
// 引入用户路由器
// const userRouter = require("./router/user.js");
// 引入商品路由器
// const goodsR   outer = require("./router/goods.js");
// 引入地址路由
// const addrRouter = require("./router/address.js");
// 引入订单路由
// const orderRouter = require("./router/order.js");
// 引入相关路由
// const aboutRouter = require("./router/about.js");
//引入toke n模块
const jwt = require("./jwt.js");
//创建WEB服务器
const app = express();

// 加载cors模块  跨域
const cors = require("cors");
// 使用cors中间件
app.use(
  cors({
    origin: ["http://localhost:8080", "http://127.0.0.1:8080"],
  })
);

// 安装配置session  npm i express-session --save
const session = require("express-session");
// 引入connect-mongo模块（将session写入数据库，持久化）
// const MongoStore = require('connect-mongo')(session);
//配置session信息
app.use(
  session({
    secret: "keyboard cat", //自定义秘钥 用于生成sid
    resave: false,
    saveUninitialized: true,
    cookie: { maxAge: 300000 },
  })
);
//生成验证码
app.get("/getCode", (req, res) => {
  let codeConfig = {
    size: 4, //验证码长度
    ignoreChars: "0o1ilOI", //忽略的字符
    noise: 3, //干扰线
    width: 100,
    height: 40,
    fontSize: 60,
    color: true, //验证码字符是否有颜色
    background: "#ff9baa42",
  };
  var result = captcha.create(codeConfig);
  req.session.captcha = result.text.toLocaleUpperCase();
  res.type("svg");
  res.send(result.data);
});

// 托管静态资源到public目录下
app.use(express.static("public"));

// 使用body-parser中间件
app.use(bodyParser.urlencoded({ extended: false }));
var token = "";
// 配置token
app.use((req, res, next) => {
  if (
    req.url != "/user/login" &&
    (req.url.startsWith("/user") ||
      req.url.startsWith("/order") ||
      req.url.startsWith("/addr"))
  ) {
    let token = req.headers.token; //拿到请求头中的token参数值
    console.log("进入token拦截");
    let result = jwt.verifyToken(token); //解密
    // 如果考验通过就next,否则就返回登录信息不正确
    if (result === undefined) {
      console.log(1);
      res.send({
        code: 403,
        msg: "未登录",
      });
    } else if (result.name == "TokenExpiredError") {
      console.log(2);
      res.send({
        code: 403,
        msg: "登录超时，请重新登录",
      });
    } else if (result.name == "JsonWebTokenError") {
      console.log(3);
      res.send({
        code: 403,
        msg: "未知错误",
      });
    } else {
      next();
    }
  } else {
    next();
  }
});
// 传出req.body

// 错误处理中间件
app.use((err, req, res, next) => {
  res.send({
    code: 500,
    msg: "服务器未知错误",
  });
});
// 添加前缀
// app.use("/user", userRouter);
// app.use("/goods", goodsRouter);
// app.use("/addr", addrRouter);
// app.use("/order", orderRouter);
// app.use("/about", aboutRouter);
// 指定服务器对象监听的端口号
app.listen(3000, () => {
  console.log("server is running...");
});
